package fish;

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

//池塘
public class Pool extends JPanel//JPanel是画笔、画纸，继承后有了相应功能
{
//	特征--属性
	//坏境：水、水草、石头--背景图片
	//BufferedImage表示图片的类
	BufferedImage bg;//背景
//	BufferedImage fish;//鱼
//	Fish f;一条-》多条--容器（数组）存储多条鱼--对象--类
	Fish[] fs=new Fish[11];//表示Fish类型数组，大小11，往fs存储11条
	
	Net net;//渔网--对象--类
	
	//大炮
	//子弹
	//金币
	//计分板
	
	
//	构造方法--构造器--赋值
	public Pool()
	{
		//ImageIO，read方法文件方式读图片
		try
		{
			bg=ImageIO.read(new File("images/bg.jpg"));
//			fish=ImageIO.read(new File("images/fish08_02.png"));
			//Fish是对象，创建后赋值
//			f=new Fish();
			//调用Start方法，启动鱼线程
//			f.start();
			//创建11条鱼，放入数组fs存储循环
			for (int i = 0; i <9; i++)
			{
				fs[i]=new Fish("fish0"+(i+1));//只能写fish01、02、03...传给Fish类
				//将数组的鱼的线程启动
				fs[i].start();
			}
			//单独创建放到fs为9为10的位置
			fs[9]=new Fish("fish13");
			fs[10]=new Fish("fish14");
			//fs数组大小11，下标0-10，for循环创建0-9的鱼，单独创建13,14的鱼
			//启动13、14鱼
			fs[9].start();
			fs[10].start();
			
			//创建渔网对象给渔网赋值
			net=new Net();
		} catch (IOException e)
		{
			//把可能会出现的异常放在try{}里进行捕获，无异常不执行catch{}，有异常执行catch{}
			e.printStackTrace();
			System.out.println("图片读取有误");
		}
	}
	
	
//	行为--方法
	//绘画的行为--paint方法：画纸、JPanel面板（有画笔、画纸）
	public void paint(Graphics g)//表示画笔，paint Alt+/方法固定
	{
		//使用画笔g将背景bg画在池塘中
		//1：图片2、3：位置4、5：大小6：null
		g.drawImage(bg, 0, 0,1000,800,null);
//		g.drawImage(fish, 500, 300, 100,100,null);
//		g.drawImage(f.type, f.x, f.y,f.width,f.height,null);//鱼的类型,坐标,大小
		
		//循环将fs存储的鱼取出画在池塘中
		for (int i = 0; i < fs.length; i++)
		{
			Fish f=fs[i];
			g.drawImage(f.type,f.x,f.y, f.width, f.height, null);
			
		}
		
		//使用画笔将渔网net画在池塘中
		int x=net.x-net.width/2;
		int y=net.y-net.height/2;
		//此时x、y是渔网移动后的坐标
		g.drawImage(net.img, x, y, net.width,net.height,null);
		
	}
	
	//自定义方法--将上面的paint方法反复执行，因为paint方法启动时只执行一次
	public void action(){
		//借用action方法，创建内部类，实现鼠标监听
		MyMouse mc=new MyMouse();
		//把监听绑定到当前池塘中，用this表示
		this.addMouseListener(mc);
		this.addMouseMotionListener(mc);
		//将mc绑定到池塘，移动、单击都会被监听到
		
		//刷新池塘面板
		while (true)//反复执行
		{
			repaint();//是java提供继承JPanel后直接用，反复
		}
		
	}
	
	
	//定义内部类--实现鼠标事件的监听
	//实现MouseListener接口or继承MouseAdapter抽象类
	class MyMouse extends MouseAdapter{
		public void mouseClicked(MouseEvent e)//鼠标单击监听--渔网捕鱼
		{
			catchFish();//调用捕鱼方法
		}
		public void mouseMoved(MouseEvent e)//鼠标移动监听--渔网移动
		{
			//获得鼠标在池塘的坐标
			int MouseX=e.getX();
			int MouseY=e.getY();
			//将鼠标的坐标赋给渔网
			net.x=MouseX;
			net.y=MouseY;
			
		}
	}
	
	//定义方法--捕鱼方法
	public void catchFish(){
		//循环将数组的11条鱼取出
		for (int i = 0; i < fs.length; i++)//i=0-10
		{
			Fish f=fs[i];//f表示取出的鱼，每一次鱼不同
			if(f.x<=net.x&&net.x<=f.x+f.width&&net.y>=f.y&&net.y<=f.y+f.height)//判断是否捕到鱼
			{
				//当渔网捕到这条鱼，让鱼重新游进池塘
				f.x=1000;
				Random r=new Random();
				f.y=r.nextInt(900-f.height);
				f.step=r.nextInt(5)+1;
			}
		}
	}
	
	
	
}

